package com.yami.shop.mystery.common.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yami.shop.common.util.PageParam;
import com.yami.shop.mystery.common.dto.ActivityPresellDto;
import com.yami.shop.mystery.common.dto.ActivityRuleOptions;
import com.yami.shop.mystery.common.model.ActivityRule;
import com.yami.shop.mystery.common.vo.ActivityRulePageVo;
import groovy.lang.Tuple;

import java.util.List;

/**
 * 活动规则业务接口
 *
 * @author wxf
 * @date 2023/4/17 9:43
 */
public interface ActivityRuleService extends IService<ActivityRule> {

    /**
     * 活动分页列表
     *
     * @param dto
     * @return
     */
    IPage<ActivityRule> pageList(PageParam<ActivityRule> page, ActivityRulePageVo dto);

    /**
     *  保存/修改活动规则
     *
     * @param dto
     * @return
     */
    boolean saveOrUpdate(ActivityRule dto);

    /**
     * 删除活动规则
     * @param ids
     */
    void removeIds(List<Long> ids);

    /**
     * 通过活动规则ruleId查询活动信息
     *
     * @param ruleId
     * @return
     */
    ActivityRule detail(Long ruleId);

    /**
     * 更新规则状态
     *
     * @param id
     * @param status
     * @return
     */
    Boolean updateStatus(String id, String status);

    /**
     * 规则类型Options
     * @return
     */
    List<ActivityRuleOptions> getRuleTypeOptions();

    /**
     * 活动条件类型Options
     * @return
     */
    List<ActivityRuleOptions> getConditionTypeOptions();

    /**
     *  通过规则ids 查询规则对象列表
     *
     * @param activityRuleIds
     * @return
     */
    List<ActivityRule> selectByRuleId(String activityRuleIds);

    /**
     * 校验规则
     *
     * @param presell
     * @param userId
     * @return
     */
    Tuple checkActivityRule(ActivityPresellDto presell, String userId);

    /**
     *  同一类型规则校验
     *
     * @param list
     * @param ruleType
     * @return
     */
    Tuple ruleCheck(List<ActivityRule> list, String ruleType);

    List<ActivityRule> getList(ActivityRulePageVo vo);
}
